package com.jtny.nytb.equipment.service;

import com.jtny.component.dto.CurrentUserDTO;
import com.jtny.component.entity.PageData;
import com.jtny.nytb.config.datafactor.dto.ConfigDataParamManagementDTO;
import com.jtny.nytb.config.datafactor.dto.DataParam4EquipmentDTO;
import com.jtny.nytb.equipment.vo.dataparam.DataParamInfoVO;
import com.jtny.nytb.equipment.vo.dataparam.DataParamPageQueryParamVO;
import com.jtny.nytb.equipment.vo.dataparam.DataParamTempVO;
import com.jtny.nytb.equipment.dto.device.EquipmentInfoDTO;
import com.jtny.nytb.equipment.enums.CodeRuleTypeEnum;
import com.jtny.nytb.equipment.vo.dataparam.LabelVO;

import java.util.List;
import java.util.Map;

/**
 * 数据参量管理Biz
 *
 * @author 智慧能源中心 - 伍天宇
 * @package com.jtny.nytb.energymonitor.equipment.biz
 * @fileName DataParamBiz.java
 * @createTime 2023年09月19日 16:43
 * @Copyright© 2023 jtny
 * 江投能源技术研究院 版权所有
 */
public interface DataParamService {


    /**
     * 保存 设备参量
     *
     * @param dataParamTempVO {@link //DataParamTempVO} 参量
     * @return {@link Boolean}
     */
    Boolean save(DataParamInfoVO dataParamTempVO);

    /**
     * 更新 设备参量
     *
     * @param dataParamTempVO {@link DataParamInfoVO} 参量
     * @return {@link Boolean}
     */
    Boolean update(DataParamInfoVO dataParamTempVO);

    /**
     * 根据id查询 设备参量
     *
     * @param id 设备参量id
     * @return {@link DataParamInfoVO}
     */
    DataParamInfoVO getById(Long id);



    /**
     * 按规则字典 ID 移动数据参量
     *
     * @param equipmentId   设备 ID
     * @param equipmentCode 设备 code
     */
    void backDataParam(Long equipmentId, String equipmentCode);

    /**
     * 按规则字典 ID 移动数据参量 （常规添加/修改设备）
     *
     * @param ruleDictIds   规则字典 ID
     * @param equipmentId   设备 ID
     * @param equipmentCode 设备 code
     * @return {@link List<Long>}
     */
    void moveDataParamByRuleDictIds(CodeRuleTypeEnum typeEnum,
                                    List<String> ruleDictIds,
                                    Long equipmentId,
                                    String equipmentCode,
                                    String equipmentName,
                                    List<LabelVO> labelList);

    /**
     * 按设备模型 ID 移动数据参量 （规则添加/修改设备）
     *
     * @param modelId       规则字典 ID
     * @param equipmentId   设备 ID
     * @param equipmentCode 设备 code
     * @return {@link List<Long>}
     */
    void moveDataParamByModelId(CodeRuleTypeEnum typeEnum,
                                Long modelId,
                                Long equipmentId,
                                String equipmentCode,
                                String equipmentName,
                                List<LabelVO> labelList);

    /**
     * 复制设备 移动数据参量 （规则添加/修改设备）
     *
     * @param copyId        被复制的设备 ID
     * @param copyCode      被复制的设备 code
     * @param equipmentId   设备 ID
     * @param equipmentCode 设备 code
     * @return {@link List<Long>}
     */
    void copyDataParam(Long copyId,
                       String copyCode,
                       Long equipmentId,
                       String equipmentCode,
                       String equipmentName,
                       List<LabelVO> labelList);

    /**
     * 数据转换
     *
     * @param dataParamTempList 数据参数临时列表
     * @return {@link List}<{@link DataParam4EquipmentDTO}>
     */
    List<DataParam4EquipmentDTO> toDataParam4EquipmentList(List<DataParamTempVO> dataParamTempList);

    /**
     * 导入数据参数
     *
     * @param dataParamTempList 数据参数临时列表
     */
    void importDataParam(String tenantId, List<DataParam4EquipmentDTO> dataParamTempList);

    /**
     * 导入数据参数（模型）
     *
     * @param currentUser
     * @param mapEquipmentName
     * @param equipmentNameModelNameMap
     */
    void importDataParamModel(CurrentUserDTO currentUser,
                              Map<String, EquipmentInfoDTO> mapEquipmentName,
                              Map<String, String> equipmentNameModelNameMap);


}
